package com.ruoyi.project.modules.tableIndex.service.impl;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import cn.hutool.core.collection.CollectionUtil;
import com.ruoyi.common.exception.BusinessException;
import com.ruoyi.project.modules.tableIndex.domain.TableIndexField;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ruoyi.project.modules.tableIndex.mapper.TableIndexMapper;
import com.ruoyi.project.modules.tableIndex.domain.TableIndex;
import com.ruoyi.project.modules.tableIndex.service.ITableIndexService;
import com.ruoyi.common.core.text.Convert;
import org.springframework.transaction.annotation.Transactional;

import javax.annotation.Resource;

/**
 * 索引信息Service业务层处理
 * 
 * @author smallrain
 * @date 2022-07-09
 */
@Service
public class TableIndexServiceImpl implements ITableIndexService 
{
    @Resource
    private TableIndexMapper tableIndexMapper;

    /**
     * 查询索引信息
     * 
     * @param id 索引信息主键
     * @return 索引信息
     */
    @Override
    public TableIndex selectTableIndexById(Long id)
    {
        return tableIndexMapper.selectTableIndexById(id);
    }

    /**
     * 查询索引信息列表
     * 
     * @param tableIndex 索引信息
     * @return 索引信息
     */
    @Override
    public List<TableIndex> selectTableIndexList(TableIndex tableIndex)
    {
        return tableIndexMapper.selectTableIndexList(tableIndex);
    }

    /**
     * 新增索引信息
     * 
     * @param tableIndex 索引信息
     * @return 结果
     */
    @Override
    @Transactional
    public int insertTableIndex(TableIndex tableIndex)
    {
        int i = tableIndexMapper.insertTableIndex(tableIndex);
        saveIndexField(tableIndex);
        return i;
    }

    private void saveIndexField(TableIndex tableIndex) {
        if (CollectionUtil.isNotEmpty(tableIndex.getTableIndexFieldList())) {
            Map<Long, Boolean> record = new HashMap<>();
            for (TableIndexField tableIndexField : tableIndex.getTableIndexFieldList()) {
                tableIndexField.setTableIndexId(tableIndex.getId());
                if (tableIndexField.getOrderNum() == null) {
                    throw new BusinessException("字段排序不能为空");
                }
                if (record.containsKey(tableIndexField.getFieldId())) {
                    throw new BusinessException("字段不能重复");
                }
                record.put(tableIndexField.getFieldId(), true);
            }
            this.tableIndexMapper.batchSaveIndexField(tableIndex.getTableIndexFieldList());
        } else {
            throw new BusinessException("字段不能为空");
        }
    }

    /**
     * 修改索引信息
     * 
     * @param tableIndex 索引信息
     * @return 结果
     */
    @Override
    @Transactional
    public int updateTableIndex(TableIndex tableIndex)
    {
        int i = tableIndexMapper.updateTableIndex(tableIndex);
        this.tableIndexMapper.deleteTableIndexField(tableIndex.getId());
        saveIndexField(tableIndex);
        return i;
    }

    /**
     * 批量删除索引信息
     * 
     * @param ids 需要删除的索引信息主键
     * @return 结果
     */
    @Override
    public int deleteTableIndexByIds(String ids)
    {
        return tableIndexMapper.deleteTableIndexByIds(Convert.toStrArray(ids));
    }

    /**
     * 删除索引信息信息
     * 
     * @param id 索引信息主键
     * @return 结果
     */
    @Override
    public int deleteTableIndexById(Long id)
    {
        return tableIndexMapper.deleteTableIndexById(id);
    }

    @Override
    public boolean checkField(List<Long> fieldIds) {
        int count = this.tableIndexMapper.countIndexField(fieldIds);
        return count > 0;
    }
}